home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #002 (19xx)(Amiga User Group Deutschland e.V.).zip / Franz PD Disk #002 (19xx)(Amiga User Group Deutschland e.V.).adf / HP-10C / menus.mod < prev   
Text File  |  1988-02-24  |  11KB  |  352 lines

  1. IMPLEMENTATION MODULE CalcMenus;
  2.  
  3. (** ------------------------------------------------------------------
  4.  
  5.  
  6.  
  7.     ------------------------------------------------------------------ **)
  8.  
  9.  
  10. (* VERSION FOR COMMODORE AMIGA
  11.  
  12.      Version         : 0.00a  04-Jul-86  DJP
  13.  
  14.   *)
  15.  
  16. FROM CalcDisplay IMPORT display, displayType, NDecDigits, NSciDigits;
  17.  
  18. FROM Intuition  IMPORT IntuitionText,
  19.                        MenuItem, MenuItemPtr, ItemFlags, ItemFlagSet,
  20.                        Menu, MenuPtr, MenuFlags, MenuFlagSet,
  21.                        NoMenu, NoItem, NoSub, MenuNULL,
  22.                        WindowPtr,
  23.                        IDCMPFlagSet, IDCMPFlags;
  24. FROM IntuiUtils IMPORT ItemNum, MenuNum, SubNum;
  25. FROM Menus      IMPORT ItemAddress;
  26. FROM Requesters IMPORT AutoRequest;
  27. FROM Storage    IMPORT ALLOCATE;
  28. FROM SYSTEM     IMPORT ADDRESS, ADR, BYTE, NULL;
  29.  
  30.  
  31.  
  32. (* Mostly for InitMenus *)
  33. TYPE  NAME = ARRAY[0..15] OF CHAR;
  34. VAR   SubItems : ARRAY[0..15]  OF MenuItem;
  35.       Items    : ARRAY[0..6]  OF MenuItem;
  36.       Titles   : ARRAY[0..1]  OF Menu;
  37.       SubName  : ARRAY[0..15]  OF NAME;
  38.       ItemName : ARRAY[0..6]  OF NAME;
  39.       TName    : ARRAY[0..1]  OF NAME;
  40.       SubText  : ARRAY[0..15]  OF IntuitionText;
  41.       Itemtext : ARRAY[0..6]  OF IntuitionText;
  42.  
  43.  
  44. PROCEDURE MenuHandle( menuNumber : CARDINAL ; wp : WindowPtr ) : BOOLEAN;
  45.  
  46.  VAR I      : INTEGER;
  47.      ItemA  : MenuItemPtr;
  48.      NMenu  : CARDINAL;
  49.      NItem  : CARDINAL;
  50.      NSubI  : CARDINAL;
  51.  
  52.  
  53.  PROCEDURE UnCheck;
  54.  
  55.  VAR I : INTEGER;
  56.  
  57.  BEGIN
  58.    (* Un-check all menu and submenu items for menu 1 *)
  59.    FOR I := 2 TO 6 DO
  60.       Items[I].Flags := ItemFlagSet{ItemText, ItemEnabled, It6, CheckIt};
  61.    END;
  62.    FOR I := 0 TO 15 DO
  63.       SubItems[I].Flags := ItemFlagSet{ItemText, ItemEnabled, It6, CheckIt};
  64.    END;
  65.  END UnCheck;
  66.  
  67.  
  68.  
  69.  PROCEDURE AUTOREQUEST;
  70.  
  71.   TYPE  LINE = ARRAY[0..49] OF CHAR;
  72.  
  73.   VAR
  74.         I     : CARDINAL;
  75.         NMenu : CARDINAL;
  76.         NItem : CARDINAL;
  77.         NSubI : CARDINAL;
  78.         Line1        : ARRAY[0..49] OF CHAR;
  79.         Line2        : ARRAY[0..49] OF CHAR;
  80.         Line3        : ARRAY[0..49] OF CHAR;
  81.         Line4        : ARRAY[0..49] OF CHAR;
  82.         Line5        : ARRAY[0..49] OF CHAR;
  83.         Line6        : ARRAY[0..49] OF CHAR;
  84.         Line7        : ARRAY[0..49] OF CHAR;
  85.         NoText       : ARRAY[0..4]  OF CHAR;
  86.         YesText      : ARRAY[0..4]  OF CHAR;
  87.         AutoBodyText : ARRAY[0..7]  OF IntuitionText;
  88.         AutoYesText  : IntuitionText;
  89.         AutoNoText   : IntuitionText;
  90.         AutoYesFlags : IDCMPFlagSet;
  91.         AutoNoFlags  : IDCMPFlagSet;
  92.         OK           : BOOLEAN;
  93.         Top          : CARDINAL;
  94.  
  95.    BEGIN
  96.      (* Create AutoRequester *)
  97.       YesText := " OK ";
  98.       WITH AutoYesText DO
  99.          FrontPen := BYTE(2);  BackPen := BYTE(0);
  100.          DrawMode := BYTE(0);
  101.          LeftEdge := 6;       TopEdge := 3;
  102.          ITextFont := NULL;  NextText  := NULL;
  103.          IText     := ADR( YesText );
  104.       END;
  105.       NoText := "FINE";
  106.       WITH AutoNoText DO
  107.          FrontPen := BYTE(2);  BackPen := BYTE(0);
  108.          DrawMode := BYTE(0);
  109.          LeftEdge := 6;       TopEdge := 3;
  110.          ITextFont := NULL;  NextText  := NULL;
  111.          IText     := ADR( NoText );
  112.       END;
  113.       Line1 := "HP-10C  (sort of)             ";
  114.       Line2 := " Written by  Duncan Prindle   ";
  115.       Line3 := "   using TDI Modula2          ";
  116.       Line4 := " Send comments to;            ";
  117.       Line5 := "   BITNET.DUNCAN@SLACVM       ";
  118.       Line6 := " For more information see     ";
  119.       Line7 := "       HP-10C.DOC             ";
  120.       FOR I := 0 TO 6 DO
  121.          Top := 10 * (I + 1);
  122.          WITH AutoBodyText[I] DO
  123.             FrontPen  := BYTE(2); BackPen   := BYTE(0);
  124.             DrawMode  := BYTE(0);
  125.             LeftEdge  := 10;      TopEdge := Top;
  126.             ITextFont := NULL;    NextText  := NULL;
  127.          END;
  128.       END;
  129.       FOR I := 0 TO 5 DO
  130.          WITH AutoBodyText[I] DO
  131.             NextText := ADR( AutoBodyText[I+1] );
  132.          END;
  133.       END;
  134.       AutoBodyText[0].IText := ADR( Line1 );
  135.       AutoBodyText[1].IText := ADR( Line2 );
  136.       AutoBodyText[2].IText := ADR( Line3 );
  137.       AutoBodyText[3].IText := ADR( Line4 );
  138.       AutoBodyText[4].IText := ADR( Line5 );
  139.       AutoBodyText[5].IText := ADR( Line6 );
  140.       AutoBodyText[6].IText := ADR( Line7 );
  141.       AutoYesFlags := IDCMPFlagSet{};
  142.       AutoNoFlags  := IDCMPFlagSet{};
  143.       OK := AutoRequest( wp^, AutoBodyText[0], AutoYesText,
  144.                          AutoNoText, AutoYesFlags, AutoNoFlags, 300, 130);
  145.  
  146.    END AUTOREQUEST;
  147.  
  148.  
  149.  
  150.  BEGIN
  151.  
  152.      WHILE menuNumber # MenuNULL DO
  153.        (* Decode Menu number *)
  154.         NMenu := MenuNum( menuNumber );
  155.         NItem := ItemNum( menuNumber );
  156.         NSubI := SubNum( menuNumber );
  157.  
  158.        (* Now Do something *)
  159.         IF NMenu = 0 THEN
  160.           (* Menu 0.  The items are:
  161.              NItem  := 0 =>   "ABOUT"
  162.              NItem  := 1 =>   "QUIT"   *)
  163.  
  164.            IF     NItem = 0  THEN AUTOREQUEST;
  165.             ELSIF NItem = 1  THEN RETURN FALSE;
  166.            END;
  167.  
  168.         ELSIF NMenu = 1 THEN
  169.            (* Menu 1 is the Display
  170.               NItem := 0 =>   "BINARY"
  171.               NItem := 1 =>   "OCTAL"
  172.               NItem := 2 =>   "HEX"
  173.               NItem := 3 =>   "DECIMAL"
  174.               NItem := 4 =>   "SCIENTIFIC"
  175.  
  176.             DECIMAL and SCIENTIFIC have subitems. *)
  177.  
  178.            IF     NItem = 0 THEN display := BINARY;     UnCheck;
  179.             ELSIF NItem = 1 THEN display := OCTAL;      UnCheck;
  180.             ELSIF NItem = 2 THEN display := HEX;        UnCheck;
  181.             ELSIF NItem = 3 THEN display := DECIMAL;    UnCheck;
  182.                   NDecDigits := NSubI + 1;
  183.                   SubItems[NSubI].Flags :=
  184.                                     ItemFlagSet{ItemText, ItemEnabled,
  185.                                                 It6, CheckIt, Checked};
  186.             ELSIF NItem = 4 THEN display := SCIENTIFIC; UnCheck;
  187.                   NSciDigits := NSubI + 1;
  188.                   NSciDigits := - NSciDigits;
  189.                   SubItems[NSubI+8].Flags :=
  190.                                     ItemFlagSet{ItemText, ItemEnabled,
  191.                                                 It6, CheckIt, Checked};
  192.            END;
  193.            Items[NItem+2].Flags := ItemFlagSet{ItemText, ItemEnabled,
  194.                                              It6, CheckIt, Checked};
  195.         END;
  196.        (* Finished with current menu item. Get next one and handle it. *)
  197.         ItemA := ItemAddress( Titles[0], menuNumber );
  198.         menuNumber := ItemA^.NextSelect;
  199.      END;
  200.  
  201.    RETURN TRUE;
  202.    END MenuHandle;
  203.  
  204.  
  205.  
  206. PROCEDURE InitMenus( ): MenuPtr;
  207.  
  208.    VAR   I : CARDINAL;
  209.  
  210.  BEGIN
  211.  
  212.    SubName[ 0] := "   1";
  213.    SubName[ 1] := "   2";
  214.    SubName[ 2] := "   3";
  215.    SubName[ 3] := "   4";
  216.    SubName[ 4] := "   5";
  217.    SubName[ 5] := "   6";
  218.    SubName[ 6] := "   7";
  219.    SubName[ 7] := "   8";
  220.    SubName[ 8] := "   1";
  221.    SubName[ 9] := "   2";
  222.    SubName[10] := "   3";
  223.    SubName[11] := "   4";
  224.    SubName[12] := "   5";
  225.    SubName[13] := "   6";
  226.    SubName[14] := "   7";
  227.    SubName[15] := "   8";
  228.  
  229.    FOR I := 0 TO 15 DO
  230.       WITH SubText[I] DO
  231.          FrontPen := BYTE(2);  BackPen := BYTE(0);  DrawMode := BYTE(0);
  232.          LeftEdge := 0;        TopEdge := 1;
  233.          ITextFont := NULL;
  234.          IText     := ADR( SubName[I] );
  235.          NextText  := NULL;
  236.       END;
  237.    END;
  238.  
  239.    ItemName[0] := " ABOUT";
  240.    ItemName[1] := " QUIT";
  241.    ItemName[2] := "   BINARY";
  242.    ItemName[3] := "   OCTAL";
  243.    ItemName[4] := "   HEX";
  244.    ItemName[5] := "   DECIMAL";
  245.    ItemName[6] := "   SCIENTIFIC";
  246.    FOR I := 0 TO 6 DO
  247.       WITH Itemtext[I] DO
  248.          FrontPen := BYTE(2);  BackPen := BYTE(0);  DrawMode := BYTE(0);
  249.          LeftEdge := 0;        TopEdge := 1;
  250.          ITextFont := NULL;
  251.          IText     := ADR( ItemName[I] );
  252.          NextText  := NULL;
  253.       END;
  254.    END;
  255.  
  256.    FOR I := 0 TO 15 DO
  257.       WITH SubItems[I] DO
  258.          IF I < 15
  259.             THEN NextItem := ADR( SubItems[I+1] );
  260.             ELSE NextItem := NULL;
  261.          END;
  262.          IF I < 8
  263.             THEN TopEdge := 10*I;
  264.             ELSE TopEdge := 10*(I-8);
  265.          END;
  266.          LeftEdge := 108;  Width := 48;  Height := 10;
  267.          Flags    :=  ItemFlagSet{ItemText, ItemEnabled, CheckIt, It6};
  268.          ItemFill := ADR( SubText[I] );
  269.          SelectFill    := NULL;
  270.          SubItem  := NULL;
  271.       END;
  272.    END;
  273.  
  274.    SubItems[ 0].MutualExclude := 254;
  275.    SubItems[ 1].MutualExclude := 253;
  276.    SubItems[ 2].MutualExclude := 251;
  277.    SubItems[ 2].Flags    :=  ItemFlagSet{ItemText, ItemEnabled, It6,
  278.                                                        CheckIt,  Checked};
  279.    SubItems[ 3].MutualExclude := 247;
  280.    SubItems[ 4].MutualExclude := 239;
  281.    SubItems[ 5].MutualExclude := 223;
  282.    SubItems[ 6].MutualExclude := 191;
  283.    SubItems[ 7].MutualExclude := 127;
  284.    SubItems[ 7].NextItem := NULL;
  285.  
  286.    SubItems[ 8].MutualExclude := 254;
  287.    SubItems[ 9].MutualExclude := 253;
  288.    SubItems[10].MutualExclude := 251;
  289.    SubItems[11].MutualExclude := 247;
  290.    SubItems[12].MutualExclude := 239;
  291.    SubItems[13].MutualExclude := 223;
  292.    SubItems[14].MutualExclude := 191;
  293.    SubItems[15].MutualExclude := 127;
  294.  
  295.    FOR I := 0 TO 6 DO
  296.       WITH Items[I] DO
  297.          IF I < 6
  298.             THEN NextItem := ADR( Items[I+1] );
  299.             ELSE NextItem := NULL;
  300.          END;
  301.          IF I < 2
  302.             THEN TopEdge := 10*I;
  303.                  Width   :=  64;
  304.             ELSE TopEdge := 10*(I-2);
  305.                  Width   := 120;
  306.          END;
  307.          LeftEdge := 0;  Height := 10;
  308.          Flags    := ItemFlagSet{ItemText, ItemEnabled, CheckIt, It6};
  309.          MutualExclude := 0;
  310.          ItemFill := ADR( Itemtext[I] );
  311.          SelectFill    := NULL;
  312.          SubItem  := NULL;
  313.       END;
  314.    END;
  315.  
  316.    Items[0].Flags := ItemFlagSet{ItemText, ItemEnabled, It6};
  317.    Items[1].NextItem := NULL;
  318.    Items[1].Flags := ItemFlagSet{ItemText, ItemEnabled, It6};
  319.    Items[2].MutualExclude := 30;
  320.    Items[3].MutualExclude := 29;
  321.    Items[4].MutualExclude := 27;
  322.    Items[5].MutualExclude := 23;
  323.    Items[5].Flags := ItemFlagSet{ItemText, ItemEnabled, It6,
  324.                                   CheckIt, Checked};
  325.    Items[5].SubItem  := ADR( SubItems[0] );
  326.    Items[6].MutualExclude := 15;
  327.    Items[6].SubItem  := ADR( SubItems[8] );
  328.  
  329.    TName[0] := " HP-10C";
  330.    TName[1] := " DISPLAY";
  331.  
  332.    WITH Titles[0] DO
  333.       NextMenu  := ADR( Titles[1] );
  334.       LeftEdge  :=  3;  TopEdge := 0;  Width := 70;  Height := 0;
  335.       Flags     := MenuFlagSet{MenuEnabled};
  336.       MenuName  := ADR( TName[0] );
  337.       FirstItem := ADR( Items[0] );
  338.    END;
  339.    WITH Titles[1] DO
  340.       NextMenu  := NULL;
  341.       LeftEdge  := 72;  TopEdge := 0;  Width := 78;  Height := 0;
  342.       Flags     := MenuFlagSet{MenuEnabled};
  343.       MenuName  := ADR( TName[1] );
  344.       FirstItem := ADR( Items[2] );
  345.    END;
  346.  
  347.    RETURN ADR( Titles[0] );
  348.    END InitMenus;
  349.  
  350.  
  351.  
  352. END CalcMenus.